package h0725;

import java.util.Scanner;
/**
  * @description 数组连续和
  * @author 不知名帅哥
  * @date 2024/7/25 13:53
  * @version 1.0
*/
public class ArraysConsecutiveSums {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n = sc.nextInt();
        int x = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i]=sc.nextInt();
        }
        int res = countSubArrays2(arr, n, x);
        System.out.println(res);
    }

    //双指针方法。
    private static int countSubArrays(int[] arr, int n, int x) {
        int start=0;
        int end=0;
        int sum=0;
        int count=0;
        //使用滑动窗口的方法
        while (end<n){
            sum+=arr[end];
            while (sum>=x){//如果当前窗口和大于等于x就是满足要求，继续start--缩小窗口，看是否有不同的组合
                count+=(n-end); //因为数组是正整数排列，所以后面肯定是越加越大
                sum-=arr[start]; //去掉start下标元素
                start++; //缩小窗口
            }
            end++; //窗口右边界加大
        }
        return count;
    }

    private static int countSubArrays2(int[] arr, int n, int x) {
        int start=0;
        int end=0;
        int sum=0;
        int count=0;
        //构造前缀和
        int[] prefixNum=new int[n+1];
        for (int i = 1; i <= arr.length; i++) {
            prefixNum[i]=prefixNum[i-1]+arr[i-1];
        }

        //使用前缀和的方法
//        while (end<=n){
//            sum=prefixNum[end]-prefixNum[start];
//            if (sum>=x){
//                count+=n-end+1;
//                start++;
//            }else {
//                end++;
//            }
//        }
        //跟上面的原理一样
        for ( start = 0; start <=arr.length ; start++) {
            for (end = start; end <= arr.length; end++) {
                if (prefixNum[end]-prefixNum[start]>=x){
                    count+=n-end+1;
                    break;
                }
            }
        }
        return count;
    }
}
